React νμ΄λλ μ΄μ μ λν ν¬κ΄μ μΈ κ°μ΄λλ‘, κ³ μ±λ₯ λ° SEO μΉνμ μΈ μΉ μ ν리μΌμ΄μ ꡬμΆμ μν μ΄μ , κ³Όμ , μΌλ°μ μΈ ν¨μ λ° λͺ¨λ² μ¬λ‘λ₯Ό μ΄ν΄λ΄ λλ€.
React νμ΄λλ μ΄μ : μλ²-ν΄λΌμ΄μΈνΈ μν μ μ‘ λ§μ€ν°νκΈ°
React νμ΄λλ μ΄μ μ νλ μΉ μ ν리μΌμ΄μ μμ μλ² μ¬μ΄λ λ λλ§(SSR)κ³Ό ν΄λΌμ΄μΈνΈ μ¬μ΄λ λ λλ§(CSR) κ°μ κ°κ·Ήμ λ©μ°λ μ€μν νλ‘μΈμ€μ λλ€. μ΄λ μλ²μμ μμ±λ 미리 λ λλ§λ HTML λ¬Έμκ° λΈλΌμ°μ μμ μμ ν μΈν°λν°λΈ React μ ν리μΌμ΄μ μ΄ λλλ‘ νλ λ©μ»€λμ¦μ λλ€. νμ΄λλ μ΄μ μ μ΄ν΄νλ κ²μ κ³ μ±λ₯, SEO μΉνμ , κ·Έλ¦¬κ³ μ¬μ©μ μΉνμ μΈ μΉ κ²½νμ ꡬμΆνλ λ° νμμ μ λλ€. μ΄ ν¬κ΄μ μΈ κ°μ΄λμμλ React νμ΄λλ μ΄μ μ 볡μ‘μ±μ κΉμ΄ νκ³ λ€μ΄ κ·Έ μ΄μ , κ³Όμ , μΌλ°μ μΈ ν¨μ λ° λͺ¨λ² μ¬λ‘λ₯Ό μ΄ν΄λ³Ό κ²μ λλ€.
React νμ΄λλ μ΄μ μ΄λ 무μμΈκ°?
ν΅μ¬μ μΌλ‘, React νμ΄λλ μ΄μ μ ν΄λΌμ΄μΈνΈ μΈ‘μμ μλ²μμ λ λλ§λ HTMLμ μ΄λ²€νΈ 리μ€λλ₯Ό 첨λΆνκ³ μ¬μ¬μ©νλ κ³Όμ μ λλ€. μ΄λ κ² μκ°ν΄λ³΄μΈμ: μλ²λ μ μ μΌλ‘ 미리 μ§μ΄μ§ μ§(HTML)μ μ 곡νκ³ , νμ΄λλ μ΄μ μ κ·Έ μ§μ μμ ν κΈ°λ₯νλλ‘ μ κΈ°, λ°°κ΄μ μ°κ²°νκ³ κ°κ΅¬(JavaScript)λ₯Ό μΆκ°νλ κ³Όμ μ λλ€. νμ΄λλ μ΄μ μ΄ μλ€λ©΄ λΈλΌμ°μ λ μνΈμμ© μμ΄ μ μ μΈ HTMLλ§ νμν κ²μ λλ€. λ³Έμ§μ μΌλ‘, μ΄λ μλ²μμ λ λλ§λ HTMLμ κ°μ Έμ λΈλΌμ°μ μμ React μ»΄ν¬λνΈλ‘ "μ΄μμκ²" λ§λλ κ²μ λλ€.
SSR vs. CSR: κ°λ¨ν μμ½
- μλ² μ¬μ΄λ λ λλ§ (SSR): μ΄κΈ° HTMLμ΄ μλ²μμ λ λλ§λμ΄ ν΄λΌμ΄μΈνΈλ‘ μ μ‘λ©λλ€. μ΄λ κ²μ μμ§ ν¬λ‘€λ¬κ° μ½ν μΈ λ₯Ό μ½κ² μΈλ±μ±ν μ μμΌλ―λ‘ μ΄κΈ° λ‘λ μκ°κ³Ό SEOλ₯Ό κ°μ ν©λλ€.
- ν΄λΌμ΄μΈνΈ μ¬μ΄λ λ λλ§ (CSR): λΈλΌμ°μ λ μ΅μνμ HTML νμ΄μ§λ₯Ό λ€μ΄λ‘λν λ€μ JavaScriptλ₯Ό κ°μ Έμ μ€ννμ¬ ν΄λΌμ΄μΈνΈ μΈ‘μμ μ 체 μ ν리μΌμ΄μ μ λ λλ§ν©λλ€. μ΄λ μ΄κΈ° λ‘λ μκ°μ΄ λλ €μ§ μ μμ§λ§, μ ν리μΌμ΄μ μ΄ λ‘λλ νμλ λ νλΆν μ¬μ©μ κ²½νμ μ 곡ν©λλ€.
νμ΄λλ μ΄μ μ SSRκ³Ό CSRμ μ₯μ μ κ²°ν©νμ¬ λΉ λ₯Έ μ΄κΈ° λ‘λ μκ°κ³Ό μμ ν μΈν°λν°λΈ μ ν리μΌμ΄μ μ μ 곡νλ κ²μ λͺ©νλ‘ ν©λλ€.
React νμ΄λλ μ΄μ μ΄ μ€μν μ΄μ λ 무μμΈκ°?
React νμ΄λλ μ΄μ μ λ€μκ³Ό κ°μ λͺ κ°μ§ μ€μν μ΄μ μ μ 곡ν©λλ€:
- SEO κ°μ : κ²μ μμ§ ν¬λ‘€λ¬κ° μλ²μμ λ λλ§λ HTMLμ μ½κ² μΈλ±μ±ν μ μμ΄ κ²μ μμ§ μμκ° ν₯μλ©λλ€. μ΄λ μ½ν μΈ κ° λ§μ μΉμ¬μ΄νΈλ μ μμκ±°λ νλ«νΌμ νΉν μ€μν©λλ€.
- λ λΉ λ₯Έ μ΄κΈ° λ‘λ μκ°: μλ²κ° 미리 λ λλ§λ HTMLμ μ 곡νλ―λ‘ μ¬μ©μλ μ½ν μΈ λ₯Ό λ 빨리 λ³Ό μ μμ΅λλ€. μ΄λ μ²΄κ° λκΈ° μκ°μ μ€μ΄κ³ νΉν λλ¦° λ€νΈμν¬ μ°κ²°μ΄λ κΈ°κΈ°μμ μ¬μ©μ κ²½νμ ν₯μμν΅λλ€.
- ν₯μλ μ¬μ©μ κ²½ν: λ λΉ λ₯Έ μ΄κΈ° λ‘λ μκ°μ μ¬μ©μ μ°Έμ¬λλ₯Ό ν¬κ² ν₯μμν€κ³ μ΄νλ₯ μ μ€μΌ μ μμ΅λλ€. μ¬μ©μλ μ½ν μΈ κ° λ‘λλ λκΉμ§ κΈ°λ€λ¦΄ νμκ° μλ€λ©΄ μΉμ¬μ΄νΈμ λ μ€λ 머무λ₯Ό κ°λ₯μ±μ΄ λμ΅λλ€.
- μ κ·Όμ±: μλ²μμ λ λλ§λ HTMLμ μ€ν¬λ¦° 리λ λ° κΈ°ν 보쑰 κΈ°μ μ λ³Έμ§μ μΌλ‘ λ μ κ·ΌνκΈ° μ½μ΅λλ€. μ΄λ μΉμ¬μ΄νΈκ° λ λμ μ¬μ©μμΈ΅μκ² μ¬μ©λ μ μλλ‘ λ³΄μ₯ν©λλ€.
μλ₯Ό λ€μ΄ λ΄μ€ μΉμ¬μ΄νΈλ₯Ό μκ°ν΄ 보μΈμ. SSRκ³Ό νμ΄λλ μ΄μ μ μ¬μ©νλ©΄ μ¬μ©μλ κΈ°μ¬ λ΄μ©μ κ±°μ μ¦μ λ³Ό μ μμ΄ λ μ κ²½νμ΄ ν₯μλ©λλ€. λν κ²μ μμ§μ κΈ°μ¬ μ½ν μΈ λ₯Ό ν¬λ‘€λ§νκ³ μΈλ±μ±νμ¬ κ²μ κ²°κ³Όμμ μΉμ¬μ΄νΈμ κ°μμ±μ λμΌ μ μμ΅λλ€. νμ΄λλ μ΄μ μ΄ μμΌλ©΄ μ¬μ©μλ μλΉ κΈ°κ° λμ λΉ νμ΄μ§λ λ‘λ© νμκΈ°λ₯Ό λ³Ό μ μμ΅λλ€.
νμ΄λλ μ΄μ νλ‘μΈμ€: λ¨κ³λ³ λΆμ
νμ΄λλ μ΄μ νλ‘μΈμ€λ λ€μ λ¨κ³λ‘ λλ μ μμ΅λλ€:
- μλ² μ¬μ΄λ λ λλ§: React μ ν리μΌμ΄μ μ΄ μλ²μμ λ λλ§λμ΄ HTML λ§ν¬μ μ μμ±ν©λλ€.
- HTML μ λ¬: μλ²κ° HTML λ§ν¬μ μ ν΄λΌμ΄μΈνΈμ λΈλΌμ°μ λ‘ μ μ‘ν©λλ€.
- μ΄κΈ° νμ: λΈλΌμ°μ κ° λ―Έλ¦¬ λ λλ§λ HTMLμ νμνμ¬ μ¬μ©μμκ² μ¦κ°μ μΈ μ½ν μΈ λ₯Ό μ 곡ν©λλ€.
- JavaScript λ€μ΄λ‘λ λ° νμ±: λΈλΌμ°μ κ° React μ ν리μΌμ΄μ κ³Ό κ΄λ ¨λ JavaScript μ½λλ₯Ό λ€μ΄λ‘λνκ³ νμ±ν©λλ€.
- νμ΄λλ μ΄μ : Reactκ° λ―Έλ¦¬ λ λλ§λ HTMLμ μΈκ³λ°μ μ΄λ²€νΈ 리μ€λλ₯Ό 첨λΆνμ¬ μ ν리μΌμ΄μ μ μΈν°λν°λΈνκ² λ§λλλ€.
- ν΄λΌμ΄μΈνΈ μ¬μ΄λ μ λ°μ΄νΈ: νμ΄λλ μ΄μ ν React μ ν리μΌμ΄μ μ μ¬μ©μ μνΈμμ© λ° λ°μ΄ν° λ³κ²½μ λ°λΌ DOMμ λμ μΌλ‘ μ λ°μ΄νΈν μ μμ΅λλ€.
React νμ΄λλ μ΄μ μ μΌλ°μ μΈ ν¨μ κ³Ό κ³Όμ
React νμ΄λλ μ΄μ μ μλΉν μ΄μ μ μ 곡νμ§λ§ λͺ κ°μ§ κ³Όμ λ μμ΅λλ€:
- νμ΄λλ μ΄μ λΆμΌμΉ(Mismatch): μ΄λ κ°μ₯ μΌλ°μ μΈ λ¬Έμ λ‘, μλ²μμ λ λλ§λ HTMLμ΄ νμ΄λλ μ΄μ μ€ ν΄λΌμ΄μΈνΈμμ μμ±λ HTMLκ³Ό μΌμΉνμ§ μμ λ λ°μν©λλ€. μ΄λ μκΈ°μΉ μμ λμ, μ±λ₯ λ¬Έμ λ° μκ°μ κ²°ν¨μΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
- μ±λ₯ μ€λ²ν€λ: νμ΄λλ μ΄μ μ ν΄λΌμ΄μΈνΈ μ¬μ΄λ λ λλ§ νλ‘μΈμ€μ μΆκ°μ μΈ μ€λ²ν€λλ₯Ό λν©λλ€. Reactλ κΈ°μ‘΄ DOMμ μννκ³ μ΄λ²€νΈ 리μ€λλ₯Ό 첨λΆν΄μΌ νλ―λ‘, νΉν 볡μ‘ν μ ν리μΌμ΄μ μ κ²½μ° κ³μ° λΉμ©μ΄ λ§μ΄ λ€ μ μμ΅λλ€.
- μλνν° λΌμ΄λΈλ¬λ¦¬: μΌλΆ μλνν° λΌμ΄λΈλ¬λ¦¬λ μλ² μ¬μ΄λ λ λλ§κ³Ό μλ²½νκ² νΈνλμ§ μμ νμ΄λλ μ΄μ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€.
- μ½λ 볡μ‘μ±: SSRκ³Ό νμ΄λλ μ΄μ μ ꡬννλ©΄ μ½λλ² μ΄μ€μ 볡μ‘μ±μ΄ μ¦κ°νλ―λ‘ κ°λ°μλ μλ²μ ν΄λΌμ΄μΈνΈ κ°μ μν λ° λ°μ΄ν° νλ¦μ μ μ€νκ² κ΄λ¦¬ν΄μΌ ν©λλ€.
νμ΄λλ μ΄μ λΆμΌμΉ μ΄ν΄νκΈ°
νμ΄λλ μ΄μ λΆμΌμΉλ 첫 λ λλ§ μ ν΄λΌμ΄μΈνΈ μΈ‘μμ μμ±λ κ°μ DOMμ΄ μλ²μμ μ΄λ―Έ λ λλ§λ HTMLκ³Ό μΌμΉνμ§ μμ λ λ°μν©λλ€. μ΄λ λ€μκ³Ό κ°μ λ€μν μμΈμ μν΄ λ°μν μ μμ΅λλ€:
- μλ²μ ν΄λΌμ΄μΈνΈμ λ°μ΄ν° μ°¨μ΄: κ°μ₯ λΉλ²ν μμΈμ λλ€. μλ₯Ό λ€μ΄ νμ¬ μκ°μ νμνλ κ²½μ° μλ²μμ λ λλ§λ μκ°κ³Ό ν΄λΌμ΄μΈνΈμμ λ λλ§λ μκ°μ΄ λ€λ₯Ό κ²μ λλ€.
- μ‘°κ±΄λΆ λ λλ§: λΈλΌμ°μ λ³ κΈ°λ₯(μ: `window` κ°μ²΄)μ κΈ°λ°μΌλ‘ μ‘°κ±΄λΆ λ λλ§μ μ¬μ©νλ κ²½μ° λ λλ§λ μΆλ ₯μ΄ μλ²μ ν΄λΌμ΄μΈνΈ κ°μ λ€λ₯Ό κ°λ₯μ±μ΄ λμ΅λλ€.
- μΌκ΄λμ§ μμ DOM ꡬ쑰: DOM ꡬ쑰μ μ°¨μ΄λ μλνν° λΌμ΄λΈλ¬λ¦¬λ μλ DOM μ‘°μμΌλ‘ μΈν΄ λ°μν μ μμ΅λλ€.
- μλͺ»λ μν μ΄κΈ°ν: ν΄λΌμ΄μΈνΈ μΈ‘μμ μνλ₯Ό μλͺ» μ΄κΈ°ννλ©΄ νμ΄λλ μ΄μ μ€μ λΆμΌμΉκ° λ°μν μ μμ΅λλ€.
νμ΄λλ μ΄μ λΆμΌμΉκ° λ°μνλ©΄ Reactλ ν΄λΌμ΄μΈνΈ μΈ‘μμ λΆμΌμΉνλ μ»΄ν¬λνΈλ₯Ό λ€μ λ λλ§νμ¬ λ³΅κ΅¬λ₯Ό μλν©λλ€. μ΄λ μκ°μ λΆμΌμΉλ₯Ό ν΄κ²°ν μ μμ§λ§ μ±λ₯ μ νμ μκΈ°μΉ μμ λμμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
νμ΄λλ μ΄μ λΆμΌμΉ λ°©μ§ λ° ν΄κ²° μ λ΅
νμ΄λλ μ΄μ λΆμΌμΉλ₯Ό μλ°©νκ³ ν΄κ²°νλ €λ©΄ μ μ€ν κ³νκ³Ό μΈλΆ μ¬νμ λν μ£Όμκ° νμν©λλ€. λ€μμ λͺ κ°μ§ ν¨κ³Όμ μΈ μ λ΅μ λλ€:
- λ°μ΄ν° μΌκ΄μ± 보μ₯: μλ²μ ν΄λΌμ΄μΈνΈμμ λ λλ§μ μ¬μ©λλ λ°μ΄ν°κ° μΌκ΄λλλ‘ νμμμ€. μ΄λ μ’ μ’ μλ²μμ λ°μ΄ν°λ₯Ό κ°μ Έμ¨ λ€μ μ§λ ¬ννμ¬ ν΄λΌμ΄μΈνΈλ‘ μ λ¬νλ μμ μ ν¬ν¨ν©λλ€.
- ν΄λΌμ΄μΈνΈ μ¬μ΄λ ν¨κ³Όμ `useEffect` μ¬μ©: `useEffect` ν μΈλΆμμ λΈλΌμ°μ λ³ APIλ₯Ό μ¬μ©νκ±°λ DOM μ‘°μμ μννμ§ λ§μμμ€. `useEffect`λ ν΄λΌμ΄μΈνΈ μΈ‘μμλ§ μ€νλλ―λ‘ μ½λκ° μλ²μμ μ€νλμ§ μλλ‘ λ³΄μ₯ν©λλ€.
- `suppressHydrationWarning` Prop μ¬μ©: μ¬μν λΆμΌμΉλ₯Ό νΌν μ μλ κ²½μ°(μ: νμ¬ μκ° νμ) μν₯μ λ°λ μ»΄ν¬λνΈμ `suppressHydrationWarning` propμ μ¬μ©νμ¬ κ²½κ³ λ©μμ§λ₯Ό μ΅μ ν μ μμ΅λλ€. κ·Έλ¬λ μ΄λ λλ¬Όκ² μ¬μ©ν΄μΌ νλ©° λΆμΌμΉκ° μ ν리μΌμ΄μ κΈ°λ₯μ μν₯μ λ―ΈμΉμ§ μλλ€κ³ νμ ν λλ§ μ¬μ©ν΄μΌ ν©λλ€.
- μΈλΆ μνμ `useSyncExternalStore` μ¬μ©: μ»΄ν¬λνΈκ° μλ²μ ν΄λΌμ΄μΈνΈ κ°μ λ€λ₯Ό μ μλ μΈλΆ μνμ μμ‘΄νλ κ²½μ°, `useSyncExternalStore`λ μ΄λ€μ λκΈ°ν μνλ‘ μ μ§νλ νλ₯ν μ루μ μ λλ€.
- μ‘°κ±΄λΆ λ λλ§ μ¬λ°λ₯΄κ² ꡬν: ν΄λΌμ΄μΈνΈ μ¬μ΄λ κΈ°λ₯μ κΈ°λ°μΌλ‘ μ‘°κ±΄λΆ λ λλ§μ μ¬μ©ν λ, μ΄κΈ° μλ² λ λλ§λ HTMLμ΄ ν΄λΉ κΈ°λ₯μ μ¬μ©ν μ μμ κ°λ₯μ±μ κ³ λ €νλλ‘ ν΄μΌ ν©λλ€. μΌλ°μ μΈ ν¨ν΄μ μλ²μμ νλ μ΄μ€νλλ₯Ό λ λλ§ν λ€μ ν΄λΌμ΄μΈνΈμμ μ€μ μ½ν μΈ λ‘ κ΅μ²΄νλ κ²μ λλ€.
- μλνν° λΌμ΄λΈλ¬λ¦¬ κ°μ¬: μλνν° λΌμ΄λΈλ¬λ¦¬κ° μλ² μ¬μ΄λ λ λλ§κ³Ό νΈνλλμ§ μ μ€νκ² νκ°νμμμ€. SSRκ³Ό ν¨κ» μλνλλ‘ μ€κ³λ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ ννκ³ μ§μ μ μΈ DOM μ‘°μμ μννλ λΌμ΄λΈλ¬λ¦¬λ νΌνμμμ€.
- HTML μΆλ ₯ κ²μ¦: HTML μ ν¨μ± κ²μ¬κΈ°λ₯Ό μ¬μ©νμ¬ μλ²μμ λ λλ§λ HTMLμ΄ μ ν¨νκ³ μ ꡬμ±λμλμ§ νμΈνμμμ€. μ ν¨νμ§ μμ HTMLμ νμ΄λλ μ΄μ μ€μ μκΈ°μΉ μμ λμμ μ λ°ν μ μμ΅λλ€.
- λ‘κΉ λ° λλ²κΉ : νμ΄λλ μ΄μ λΆμΌμΉλ₯Ό μλ³νκ³ μ§λ¨νκΈ° μν΄ κ°λ ₯ν λ‘κΉ λ° λλ²κΉ λ©μ»€λμ¦μ ꡬννμμμ€. Reactλ λΆμΌμΉλ₯Ό κ°μ§νλ©΄ μ½μμ μ μ©ν κ²½κ³ λ©μμ§λ₯Ό μ 곡ν©λλ€.
μμ: μκ° λΆμΌμΉ μ²λ¦¬
νμ¬ μκ°μ νμνλ μ»΄ν¬λνΈλ₯Ό μκ°ν΄ 보μΈμ:
function CurrentTime() {
const [time, setTime] = React.useState(new Date());
React.useEffect(() => {
const interval = setInterval(() => {
setTime(new Date());
}, 1000);
return () => clearInterval(interval);
}, []);
return <p>Current time: {time.toLocaleTimeString()}</p>;
}
μ΄ μ»΄ν¬λνΈλ μλ²μ μκ°κ³Ό ν΄λΌμ΄μΈνΈμ μκ°μ΄ λ€λ₯΄κΈ° λλ¬Έμ νμ°μ μΌλ‘ νμ΄λλ μ΄μ λΆμΌμΉλ₯Ό μ λ°ν©λλ€. μ΄λ₯Ό νΌνκΈ° μν΄ μλ²μμ μνλ₯Ό `null`λ‘ μ΄κΈ°νν λ€μ ν΄λΌμ΄μΈνΈμμ `useEffect`λ₯Ό μ¬μ©νμ¬ μ λ°μ΄νΈν μ μμ΅λλ€:
function CurrentTime() {
const [time, setTime] = React.useState(null);
React.useEffect(() => {
setTime(new Date());
const interval = setInterval(() => {
setTime(new Date());
}, 1000);
return () => clearInterval(interval);
}, []);
return <p>Current time: {time ? time.toLocaleTimeString() : 'Loading...'}</p>;
}
μ΄ μμ λ μ»΄ν¬λνΈλ μ΄κΈ°μ "Loading..."μ νμν λ€μ ν΄λΌμ΄μΈνΈ μΈ‘μμ μκ°μ μ λ°μ΄νΈνμ¬ νμ΄λλ μ΄μ λΆμΌμΉλ₯Ό λ°©μ§ν©λλ€.
React νμ΄λλ μ΄μ μ±λ₯ μ΅μ ν
νμ΄λλ μ΄μ μ μ μ€νκ² μ²λ¦¬νμ§ μμΌλ©΄ μ±λ₯ λ³λͺ© νμμ΄ λ μ μμ΅λλ€. λ€μμ νμ΄λλ μ΄μ μ±λ₯μ μ΅μ ννκΈ° μν λͺ κ°μ§ κΈ°μ μ λλ€:
- μ½λ μ€ν리ν : μ½λ μ€ν리ν μ μ¬μ©νμ¬ μ ν리μΌμ΄μ μ λ μμ μ²ν¬λ‘ λλλλ€. μ΄λ κ² νλ©΄ ν΄λΌμ΄μΈνΈ μΈ‘μμ λ€μ΄λ‘λνκ³ νμ±ν΄μΌ νλ JavaScriptμ μμ΄ μ€μ΄λ€μ΄ μ΄κΈ° λ‘λ μκ°κ³Ό νμ΄λλ μ΄μ μ±λ₯μ΄ ν₯μλ©λλ€.
- μ§μ° λ‘λ©(Lazy Loading): μ»΄ν¬λνΈμ 리μμ€κ° νμν λλ§ λ‘λν©λλ€. μ΄λ μ΄κΈ° λ‘λ μκ°μ ν¬κ² μ€μ΄κ³ μ ν리μΌμ΄μ μ μ λ°μ μΈ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
- λ©λͺ¨μ΄μ μ΄μ (Memoization): λΆνμνκ² λ€μ λ λλ§ν νμκ° μλ μ»΄ν¬λνΈλ₯Ό λ©λͺ¨ννκΈ° μν΄ `React.memo`λ₯Ό μ¬μ©ν©λλ€. μ΄λ λΆνμν DOM μ λ°μ΄νΈλ₯Ό λ°©μ§νκ³ νμ΄λλ μ΄μ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
- λλ°μ΄μ± λ° μ€λ‘νλ§: λλ°μ΄μ± λ° μ€λ‘νλ§ κΈ°μ μ μ¬μ©νμ¬ μ΄λ²€νΈ νΈλ€λ¬κ° νΈμΆλλ νμλ₯Ό μ νν©λλ€. μ΄λ κ³Όλν DOM μ λ°μ΄νΈλ₯Ό λ°©μ§νκ³ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
- ν¨μ¨μ μΈ λ°μ΄ν° νμΉ: μλ²μ ν΄λΌμ΄μΈνΈ κ°μ μ μ‘ν΄μΌ νλ λ°μ΄ν° μμ μ΅μννλλ‘ λ°μ΄ν° νμΉμ μ΅μ νν©λλ€. μΊμ± λ° λ°μ΄ν° μ€λ³΅ μ κ±°μ κ°μ κΈ°μ μ μ¬μ©νμ¬ μ±λ₯μ ν₯μμν€μΈμ.
- μ»΄ν¬λνΈ μμ€ νμ΄λλ μ΄μ : νμν μ»΄ν¬λνΈλ§ νμ΄λλ μ΄μ ν©λλ€. νμ΄μ§μ μΌλΆκ° μ²μλΆν° μνΈμμ©νμ§ μλ κ²½μ°, νμν λκΉμ§ νμ΄λλ μ΄μ μ μ§μ°μν€μΈμ.
μμ: μ»΄ν¬λνΈ μ§μ° λ‘λ©
ν° μ΄λ―Έμ§ κ°€λ¬λ¦¬λ₯Ό νμνλ μ»΄ν¬λνΈλ₯Ό μκ°ν΄ 보μΈμ. `React.lazy`λ₯Ό μ¬μ©νμ¬ μ΄ μ»΄ν¬λνΈλ₯Ό μ§μ° λ‘λ©ν μ μμ΅λλ€:
const ImageGallery = React.lazy(() => import('./ImageGallery'));
function MyComponent() {
return (
<div>
<Suspense fallback={<div>Loading gallery...</div>}>
<ImageGallery />
</Suspense>
</div>
);
}
μ΄ μ½λλ νμν λλ§ `ImageGallery` μ»΄ν¬λνΈλ₯Ό λ‘λνμ¬ μ ν리μΌμ΄μ μ μ΄κΈ° λ‘λ μκ°μ κ°μ ν©λλ€.
μΈκΈ° νλ μμν¬μμμ React νμ΄λλ μ΄μ
λͺλͺ μΈκΈ° μλ React νλ μμν¬λ μλ² μ¬μ΄λ λ λλ§ λ° νμ΄λλ μ΄μ μ μν λ΄μ₯ μ§μμ μ 곡ν©λλ€:
- Next.js: μλ² λ λλ§ React μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν μΈκΈ° μλ νλ μμν¬μ λλ€. Next.jsλ μλ μ½λ μ€ν리ν , λΌμ°ν λ° λ°μ΄ν° νμΉμ μ 곡νμ¬ κ³ μ±λ₯ λ° SEO μΉνμ μΈ μΉ μ ν리μΌμ΄μ μ μ½κ² ꡬμΆν μ μλλ‘ ν©λλ€.
- Gatsby: Reactλ₯Ό μ¬μ©νλ μ μ μ¬μ΄νΈ μμ±κΈ°μ λλ€. Gatsbyλ₯Ό μ¬μ©νλ©΄ 미리 λ λλ§λκ³ μ±λ₯μ κ³ λλ‘ μ΅μ νλ μΉμ¬μ΄νΈλ₯Ό λ§λ€ μ μμ΅λλ€.
- Remix: μΉ νμ€μ μμ©νκ³ λ°μ΄ν° λ‘λ© λ° λ³νμ λν λ νΉν μ κ·Ό λ°©μμ μ 곡νλ νμ€ν μΉ νλ μμν¬μ λλ€. Remixλ μ¬μ©μ κ²½νκ³Ό μ±λ₯μ μ°μ μν©λλ€.
μ΄λ¬ν νλ μμν¬λ SSR λ° νμ΄λλ μ΄μ ꡬν νλ‘μΈμ€λ₯Ό λ¨μννμ¬ κ°λ°μκ° μλ² μ¬μ΄λ λ λλ§μ 볡μ‘μ±μ κ΄λ¦¬νλ λμ μ ν리μΌμ΄μ λ‘μ§ κ΅¬μΆμ μ§μ€ν μ μλλ‘ ν©λλ€.
React νμ΄λλ μ΄μ λ¬Έμ λλ²κΉ
νμ΄λλ μ΄μ λ¬Έμ λ₯Ό λλ²κΉ νλ κ²μ μ΄λ €μΈ μ μμ§λ§, Reactλ λͺ κ°μ§ μ μ©ν λꡬμ κΈ°μ μ μ 곡ν©λλ€:
- React κ°λ°μ λꡬ: React κ°λ°μ λꡬ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ μ¬μ©νλ©΄ μ»΄ν¬λνΈ νΈλ¦¬λ₯Ό κ²μ¬νκ³ νμ΄λλ μ΄μ λΆμΌμΉλ₯Ό μλ³ν μ μμ΅λλ€.
- μ½μ κ²½κ³ : Reactλ νμ΄λλ μ΄μ λΆμΌμΉλ₯Ό κ°μ§νλ©΄ μ½μμ κ²½κ³ λ©μμ§λ₯Ό νμν©λλ€. μ΄λ¬ν κ²½κ³ λ μ’ μ’ λΆμΌμΉμ μμΈμ λν κ·μ€ν λ¨μλ₯Ό μ 곡νλ―λ‘ μ£Όμ κΉκ² μ΄ν΄λ³΄μΈμ.
- `suppressHydrationWarning` Prop: μΌλ°μ μΌλ‘ `suppressHydrationWarning` μ¬μ©μ νΌνλ κ²μ΄ κ°μ₯ μ’μ§λ§, νμ΄λλ μ΄μ λ¬Έμ λ₯Ό 격리νκ³ λλ²κΉ νλ λ° λμμ΄ λ μ μμ΅λλ€. νΉμ μ»΄ν¬λνΈμ λν κ²½κ³ λ₯Ό μ΅μ ν¨μΌλ‘μ¨ λΆμΌμΉκ° μ€μ λ¬Έμ λ₯Ό μΌμΌν€λμ§ μ¬λΆλ₯Ό νλ¨ν μ μμ΅λλ€.
- λ‘κΉ : μλ²μ ν΄λΌμ΄μΈνΈμμ λ λλ§μ μ¬μ©λ λ°μ΄ν°μ μνλ₯Ό μΆμ νκΈ° μν΄ λ‘κΉ λ¬Έμ ꡬνν©λλ€. μ΄λ νμ΄λλ μ΄μ λΆμΌμΉλ₯Ό μ λ°νλ λΆμΌμΉλ₯Ό μλ³νλ λ° λμμ΄ λ μ μμ΅λλ€.
- μ΄μ§ νμ(Binary Search): ν° μ»΄ν¬λνΈ νΈλ¦¬κ° μλ κ²½μ° μ΄μ§ νμ μ κ·Ό λ°©μμ μ¬μ©νμ¬ νμ΄λλ μ΄μ λΆμΌμΉλ₯Ό μΌμΌν€λ μ»΄ν¬λνΈλ₯Ό 격리ν μ μμ΅λλ€. νΈλ¦¬μ μΌλΆλ§ νμ΄λλ μ΄μ νλ κ²μΌλ‘ μμν λ€μ, μμΈμ μ°Ύμ λκΉμ§ νμ΄λλ μ΄μ μμμ μ μ°¨ νμ₯ν©λλ€.
React νμ΄λλ μ΄μ λͺ¨λ² μ¬λ‘
React νμ΄λλ μ΄μ μ ꡬνν λ λ°λΌμΌ ν λͺ κ°μ§ λͺ¨λ² μ¬λ‘λ λ€μκ³Ό κ°μ΅λλ€:
- λ°μ΄ν° μΌκ΄μ± μ°μ : μλ²μ ν΄λΌμ΄μΈνΈμμ λ λλ§μ μ¬μ©λλ λ°μ΄ν°κ° μΌκ΄λλλ‘ λ³΄μ₯ν©λλ€.
- ν΄λΌμ΄μΈνΈ μ¬μ΄λ ν¨κ³Όμ `useEffect` μ¬μ©: `useEffect` ν μΈλΆμμ DOM μ‘°μμ μννκ±°λ λΈλΌμ°μ λ³ APIλ₯Ό μ¬μ©νμ§ λ§μμμ€.
- μ±λ₯ μ΅μ ν: μ½λ μ€ν리ν , μ§μ° λ‘λ© λ° λ©λͺ¨μ΄μ μ΄μ μ μ¬μ©νμ¬ νμ΄λλ μ΄μ μ±λ₯μ ν₯μμν΅λλ€.
- μλνν° λΌμ΄λΈλ¬λ¦¬ κ°μ¬: μλνν° λΌμ΄λΈλ¬λ¦¬κ° μλ² μ¬μ΄λ λ λλ§κ³Ό νΈνλλμ§ μ μ€νκ² νκ°ν©λλ€.
- κ²¬κ³ ν μ€λ₯ μ²λ¦¬ ꡬν: νμ΄λλ μ΄μ λΆμΌμΉλ₯Ό μ μμ μΌλ‘ μ²λ¦¬νκ³ μ ν리μΌμ΄μ μΆ©λμ λ°©μ§νκΈ° μν΄ μ€λ₯ μ²λ¦¬λ₯Ό ꡬνν©λλ€.
- μ² μ ν ν μ€νΈ: νμ΄λλ μ΄μ μ΄ μ¬λ°λ₯΄κ² μλνλμ§ νμΈνκΈ° μν΄ λ€μν λΈλΌμ°μ μ νκ²½μμ μ ν리μΌμ΄μ μ μ² μ ν ν μ€νΈν©λλ€.
- μ±λ₯ λͺ¨λν°λ§: νλ‘λμ νκ²½μμ μ ν리μΌμ΄μ μ μ±λ₯μ λͺ¨λν°λ§νμ¬ νμ΄λλ μ΄μ κ΄λ ¨ λ¬Έμ λ₯Ό μλ³νκ³ ν΄κ²°ν©λλ€.
κ²°λ‘
React νμ΄λλ μ΄μ μ νλ μΉ κ°λ°μ μ€μν μΈ‘λ©΄μΌλ‘, κ³ μ±λ₯, SEO μΉνμ , μ¬μ©μ μΉνμ μΈ μ ν리μΌμ΄μ μ λ§λ€ μ μκ² ν΄μ€λλ€. νμ΄λλ μ΄μ νλ‘μΈμ€λ₯Ό μ΄ν΄νκ³ , μΌλ°μ μΈ ν¨μ μ νΌνλ©°, λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄ κ°λ°μλ μλ² μ¬μ΄λ λ λλ§μ νμ νμ©νμ¬ νμν μΉ κ²½νμ μ 곡ν μ μμ΅λλ€. μΉμ΄ κ³μ λ°μ ν¨μ λ°λΌ, κ²½μλ ₯ μκ³ λ§€λ ₯μ μΈ μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ λ° μμ΄ React νμ΄λλ μ΄μ μ λ§μ€ν°νλ κ²μ΄ μ μ λ μ€μν΄μ§ κ²μ λλ€.
λ°μ΄ν° μΌκ΄μ±, ν΄λΌμ΄μΈνΈ μ¬μ΄λ ν¨κ³Ό λ° μ±λ₯ μ΅μ νλ₯Ό μ μ€νκ² κ³ λ €ν¨μΌλ‘μ¨ React μ ν리μΌμ΄μ μ΄ μννκ³ ν¨μ¨μ μΌλ‘ νμ΄λλ μ΄μ λμ΄ λ§€λλ¬μ΄ μ¬μ©μ κ²½νμ μ 곡νλλ‘ ν μ μμ΅λλ€.